package com.hliushi.proxy.example02;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;

/**
 * @author: hliushi
 * @date: 2023/2/14 22:07
 **/
public class BlackListFilter implements InvocationHandler {

    private List<String> blackList = Arrays.asList("电影", "游戏", "音乐", "小说");

    // 被代理的真实对象，如「猫」、交换机等 -- 所以这里定义的类型是 Object
    private Object original;

    public BlackListFilter(Object original) {
        // 注入被代理对象
        this.original = original;
        System.out.println("开启黑名单过滤功能......");
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        String url = (String) args[0];
        for (String keyword : blackList) {
            if (url.contains(keyword)) {
                System.out.printf("禁止访问: %s\n", url);
                return null;
            }
        }

        // 调用被代理对象方法
        System.out.println("校验通过, 转向实例业务对象");
        return method.invoke(original, args);
    }
}
